#include "volumetool.h"
#include "ui_volumetool.h"

VolumeTool::VolumeTool(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::VolumeTool),
    isMuted(false),
    volumeRatio(20)
{
    ui->setupUi(this);
    //设置标题框
    setWindowFlags(Qt::Popup | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);
    //设置半透明
    setAttribute(Qt::WA_TranslucentBackground);
    //自定义阴影
    QGraphicsDropShadowEffect* shadowEffect = new QGraphicsDropShadowEffect(this);
    shadowEffect->setOffset(0,0);
    shadowEffect->setColor("#646464");
    shadowEffect->setBlurRadius(10);
    setGraphicsEffect(shadowEffect);

    //设置按钮图标
    ui->silenceBtn->setIcon(QIcon(":/images/volumn.png"));
    //设置默认音量大小
    //这里需要根据音量的大小以及对应的高度比例关系来做出对应的变化
    int height = ui->outSlider->height();
    int defaultVolume = 20;     //设置默认的音量为20
    int maxVolume = 100;        //最高音量100
    int setDefaultHeight = height*defaultVolume/maxVolume;      //默认的音量大小的高度
    int y = ui->outSlider->y() + height - setDefaultHeight;     //现在的y偏移量
    ui->outSlider->setGeometry(ui->outSlider->x(),y,ui->outSlider->width(),setDefaultHeight);
    ui->sliderBtn->move(ui->sliderBtn->x(),ui->outSlider->y()-ui->sliderBtn->height()/2);
    ui->volumeRatio->setText("20%");

    //绑定静音的信号槽处理
    connect(ui->silenceBtn,&QPushButton::clicked,this,&VolumeTool::onSlienceBtnClicked);
    //安装事件过滤器
    ui->sliderBox->installEventFilter(this);
}

VolumeTool::~VolumeTool()
{
    delete ui;
}

void VolumeTool::paintEvent(QPaintEvent *event)
{
    (void)event;
    //1.创建一个QPainter对象
    QPainter painter(this);
    //2.启动抗锯齿
    painter.setRenderHint(QPainter::Antialiasing,true);
    //3.设置画笔颜色
    painter.setPen(Qt::NoPen);  //没有画笔时：画出的图形就没有边框和轮廓
    //4.设置画刷颜色
    painter.setBrush(Qt::white);
    //5.创建并绘制三角形
    QPolygon triangle;
    triangle.append(QPoint(30, 300));
    triangle.append(QPoint(70, 300));
    triangle.append(QPoint(50, 320));
    painter.drawPolygon(triangle);
}

void VolumeTool::onSlienceBtnClicked()
{
    //通过设置静音的按钮，在状态切换的时候更新图标，然后发送信号，让Music处理是否静音
    isMuted = !isMuted;
    if(isMuted)
    {
        ui->silenceBtn->setIcon(QIcon(":/images/silent.png"));
    }
    else
    {
        ui->silenceBtn->setIcon(QIcon(":/images/volumn.png"));
    }
    emit setSlience(isMuted);
}

bool VolumeTool::eventFilter(QObject *object, QEvent *event)
{
    //处理鼠标的3个操作，点击，移动，松开
    if(object == ui->sliderBox)
    {
        if(event->type() == QEvent::MouseButtonPress)
        {
            setVolumn();
        }
        else if(event->type() == QEvent::MouseMove)
        {
            setVolumn();
            emit setMusicVolumn(volumeRatio);       //这里可以随着拖动音量逐渐变大或者变小
        }
        else if(event->type() == QEvent::MouseButtonRelease)
        {
            emit setMusicVolumn(volumeRatio);
        }
        return true;
    }
    return QObject::eventFilter(object,event);
}

void VolumeTool::setVolumn()
{
    //这里的inLine的x,y,width,height： 38，25，4，180 ； 根据这个数值调整outLine
    //1.获取到鼠标相对与起始坐标的y坐标
    int height = ui->sliderBox->mapFromGlobal(QCursor().pos()).y();
    //2.调整height的范围，范围在[25,205]之间
    height = height < 25 ? 25 : height;
    height = height > 205 ? 205 : height;
    //3.调整btn的位置
    ui->sliderBtn->move(ui->sliderBtn->x(),height - ui->sliderBtn->height()/2);
    //4.调整outline的位置
    ui->outSlider->setGeometry(ui->outSlider->x(),height,ui->outSlider->width(),205-height);
    //5.计算音量的大小
    volumeRatio = (int)((int)ui->outSlider->height()/(float)180*100);
    //6.设置音量的大小文字格式
    ui->volumeRatio->setText(QString::number(volumeRatio) + "%");
}
